package qgs.zisu.javaconcurrency.javaconcurrency.chapter6_forceOrGracefulClose;

/**
 * @Author: 蔡翔
 * @Date: 2019/9/26 9:55
 * @Version 1.0
 */
public class ThreadCloseGraceful2 {
    private static class Worker extends Thread{
        @Override
        public void run(){
            while (true){
                //方式一 ： 判断是否interrupted
                if(Thread.interrupted()){
                    System.out.println("也可以在while 中判断 是否被中断");
                    break;
                }

                //方式二 ： 通过异常捕捉的方式来优雅退出
                /*
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    System.out.println("这个线程 被外部的 interrupt打断 了，执行外部的interrupt，会爆出一个异常，然后被这里捕获");

                    // 这里有线使用bread，因为 break掉的话 还是在线程里面的，可以后续的做一些其他处理，但是return就直接返回了
                    break;  //return
                }
                // break 掉后仍然在线程中，执行完后续代码 也就结束了。*/


                //-------------下面写业务逻辑----------
            }
        }
    }

    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        //等worker 执行10s
        worker.interrupt();
    }
}
